import {defineConfig} from 'vitepress'
import fs from 'fs'
import path from 'path'

// 项目根目录
const rootDir = path.resolve(__dirname, '../docs')

// 获取文件夹下的所有 Markdown 文件
const getMdFiles = (dir) => {
    const files = fs.readdirSync(dir)
    return files
        .filter(file => file.endsWith('.md')) // 过滤出 md 文件
        .map(file => ({
            text: file.replace('.md', ''), // 以文件名作为文本
            link: `/${path.relative(rootDir, path.join("docs", dir, file)).replace(/\.md$/, '')}` // 构建链接
        }))
}

// 递归获取目录下所有子文件夹和 Markdown 文件，用于生成导航栏 (nav)
const getNav = (dir) => {
    const subDirs = fs.readdirSync(dir, {withFileTypes: true})
        .filter(dirent => dirent.isDirectory()) // 只处理文件夹
        .map(dirent => path.join(dir, dirent.name))

    const navItems = []

    // 获取当前目录下的 markdown 文件
    const mdFiles = getMdFiles(dir)
    if (mdFiles.length > 0) {
        navItems.push(...mdFiles)
    }

    // 递归处理所有子目录
    subDirs.forEach(subDir => {
        const subNav = getNav(subDir) // 递归获取子目录的导航项
        if (subNav.length > 0) {
            navItems.push({
                text: path.basename(subDir), // 以文件夹名作为导航文本
                items: subNav // 递归的子目录导航
            })
        }
    })

    return navItems
}

// 递归生成 sidebar 配置项，用于展示当前目录及其子目录中的 Markdown 文件
const getSidebar = (dir, relativePath = '') => {
  const sidebar = {}

  // 获取当前目录下的 markdown 文件
  const mdFiles = getMdFiles(dir)
  if (mdFiles.length > 0) {
    const sidebarKey = relativePath ? `/docs/${relativePath}/` : '/docs/'
    sidebar[sidebarKey] = mdFiles // 将当前目录下的文件加入 sidebar
  }

  // 获取当前目录下的子目录
  const subDirs = fs.readdirSync(dir, { withFileTypes: true })
    .filter(dirent => dirent.isDirectory()) // 只处理文件夹
    .map(dirent => path.join(dir, dirent.name))

  // 递归处理子目录，并将子目录内容加入父目录的 sidebar 中
  subDirs.forEach(subDir => {
    const subRelativePath = path.relative(rootDir, subDir)
    const newRelativePath = relativePath ? `${relativePath}/${path.basename(subDir)}` : path.basename(subDir)

    // 递归获取子目录的 sidebar 配置
    const subSidebar = getSidebar(subDir, newRelativePath)

    // 确保 subSidebar 有内容，再继续递归
    if (Object.keys(subSidebar).length > 0) {
      // 需要确保父目录的 sidebarKey 被初始化
      const sidebarKey = relativePath ? `/docs/${relativePath}/` : '/docs/'
      if (!sidebar[sidebarKey]) {
        sidebar[sidebarKey] = [] // 如果当前目录没有对应的 sidebar，初始化为数组
      }

      // 将子目录的内容加入父目录的 sidebar
      sidebar[sidebarKey].push({
        text: path.basename(subDir), // 子目录作为一个分组
        items: subSidebar[`/docs/${newRelativePath}/`] // 子目录的 Markdown 文件
      })
    }
  })

  return sidebar
}




console.log(getNav(rootDir))
console.log(getSidebar(rootDir))


let config = defineConfig({
    title: "技术栈",
    description: "一个技术栈",
    head: [
        ['link', {rel: 'icon', href: '/img/favicon.ico'}]
    ],
    lastUpdated: true,
    themeConfig: {
        logo: '/img/logo.svg',
        nav: getNav(rootDir),  // 使用动态生成的 nav
        sidebar: getSidebar(rootDir),  // 使用动态生成的 sidebar
        sidebarMenuLabel: '目录',
        editLink: {
            pattern: 'https://github.com',
            text: '在 GitHub 上编辑此页'
        },
        socialLinks: [
            {
                icon: 'github',
                link: 'https://github.com/vuejs/vitepress'
            }
        ],
        footer: {
            message: '......',
            copyright: 'Copyright © 2024'
        }
    },
    vite: {
        server: {
            host: "127.0.0.1",
            port: 3000
        }
    }
})

export default config
